﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

/**
 * THÊM
 * 2013-07-25
 * AnhTran
 **/
using DirectX.Capture;
using DShowNET;
using System.Threading;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.CV.Util;


namespace ImageProcessToolbox
{
    public partial class MainFrm : Form
    {
        /**
         * THÊM
         * 2013-07-25
         * AnhTran
         **/
        /// <summary>
        /// _ToolActive: cho biết công cụ đo đạc nào đang được sử dụng
        /// _ToolActive == 0; //Ko có
        /// _ToolActive == 1; //Đo khoảng cách
        /// _ToolActive == 2; //Đo góc tam giác
        /// _ToolActive == 3; //Đo góc dây cung
        /// _ToolActive == 4; //Đo diện tích đa giác
        /// _ToolActive == 5; //để dành
        /// </summary>
        private int _ToolActive;


        #region Các biến liên quan đến hình ảnh của DirectX.Capture và DShowNET
        private Source current;
        int c = 0;
        private Filters filters;
        public string nameDevice;
        public DirectX.Capture.Capture capture = null;
        public DirectX.Capture.Filter videoDevice = null;
        #endregion

        /// <summary>
        /// 
        /// </summary>
        public MainFrm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 2013-07-25
        /// ANHTRAB
        /// </summary>
        private void TimThietBiVideoDirectXCapture()
        {
            //Tìm kiếm các thiết bị video hiện có trên máy
            try
            {
                filters = new Filters();
                CameraListStripComboBox.Items.Clear();
                for (c = 0; c < filters.VideoInputDevices.Count; c++)
                {
                    //Sẽ chỉnh sửa lại tùy ứng dụng
                    //Cập nhật danh sách thiết bị lên menu
                    CameraListStripComboBox.Items.Add(filters.VideoInputDevices[c].Name);
                }
                CameraListStripComboBox.SelectedIndex = 0;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Máy bạn không có thiết bị video\n" + ex.Message, "Lỗi phần cứng", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
        

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// Sao lưu kết quả hiện tại
        /// Cập nhật trạng thái trên menu và status
        /// </summary>
        /// <param name="_congcu">
        /// 0-Ko có
        /// 1-Đo khoảng cách
        /// 2-Đo góc tam giác
        /// 3-Đo góc dây cung
        /// 4-Đo diện tích đa giác
        /// 5-để dành
        /// </param>
        private void CapNhatTrangThaiCongCu_Click(int _congcu)
        {
            /**
             * THÊM
             * 2013-07-25
             * AnhTran
             **/
            // Kiểm tra xem người dùng có đang thao tác trên ảnh ko?
            // Nếu có hiện lưu trạng thái làm việc của phép đo trước lại
            // Vị trí các điểm đầu, cuối, kết quả tính toán.
            // Nếu ko thì thôi

            if (_ToolActive != 0)
            {
                // Lưu trạng thái làm việc của phép đo hiện tại.
            }

            // Đo khoảng cách
            _ToolActive = _congcu;
            // Cập nhận trạng thái trên menu và status

            DoKhoangCanhToolStripMenuItem.Checked = (_congcu == 1) ? true : false;
            DoGocToolStripMenuItem.Checked = (_congcu == 2) ? true : false; ;
            DoGocDayCungToolStripMenuItem.Checked = (_congcu == 3) ? true : false; ;
            DoDienTichToolStripMenuItem.Checked = (_congcu == 4) ? true : false; ;

            lblStatusCongCu.Text = (_congcu == 1) ? "Đo khoảng cách" :
                                    (_congcu == 2) ? "Đo góc tam giác" :
                                    (_congcu == 3) ? "Đo góc dây cung" :
                                    (_congcu == 4) ? "Đo diện tích đa giác" :
                                    "Không sử dụng";
            // 
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoKhoangCanhToolStripMenuItem_Click(object sender, EventArgs e)
        {

            CapNhatTrangThaiCongCu_Click(1);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoGocToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(2);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoDienTichToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(4);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoGocDayCungToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(3);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDoKhoangCanh_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(1);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDoGoc_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(2);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDoDayCung_Click(object sender, EventArgs e)
        {
            CapNhatTrangThaiCongCu_Click(3);
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void MainFrm_Load(object sender, EventArgs e)
        {
            // 2013-07-30
            // ANHTRAN
            TimThietBiVideoDirectXCapture();
        }

        /// <summary>
        /// 2013-07-25
        /// Last edit AnhTran
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnChupHinh_Click(object sender, EventArgs e)
        {
            frmCameraViewer frm = new frmCameraViewer(CameraListStripComboBox.SelectedIndex);
            frm.ShowDialog();
            if (frm.Result != null)
            {
                imageBoxEdit.Image = frm.Result;
            }
        }

        private void MainFrm_FormClosed(object sender, FormClosedEventArgs e)
        {
            
        }
    }
}
